#ifndef SCRCPY_CLI_H
#define SCRCPY_CLI_H

/* 命令行输入参数解析 */

#include "common.h"

#include <stdbool.h>

#include "options.h"

enum sc_pause_on_exit {
    SC_PAUSE_ON_EXIT_TRUE,
    SC_PAUSE_ON_EXIT_FALSE,
    SC_PAUSE_ON_EXIT_IF_ERROR,
};

/* 
通过scrcpy命令行参数解析出来的结构化的scrcpy运行前配置的参数
仅用于scrcpy初始化中
*/
struct scrcpy_cli_args {
    /* 初始化时需要的参数，根据命令行参数解析出来 */
    struct scrcpy_options opts;

    /* 是否为显示帮助指令 */
    bool help;

    /* 是否为显示版本指令 */
    bool version;

    enum sc_pause_on_exit pause_on_exit;
};

/**
 * 打印使用说明，帮助信息
 * @param arg0 命令行启动传入的第0个参数，即可执行程序的相对路径
*/
void
scrcpy_print_usage(const char *arg0);

/**
 * 解析scrcpy命令行参数到结构中
 * @param args 结构化入参（从命令行中解析出的结构化数据）
 * @param argc 传入的参数的数量，直接从main函数中传入
 * @param argv (命令行入参)字符串指针的数组，数组的大小由argc指定。第一个参数是执行的命令，也就是可执行文件的绝对或相对路径
 * @return 成功解析返回 true,失败返回 false
*/
bool
scrcpy_parse_args(struct scrcpy_cli_args *args, int argc, char *argv[]);

// SC_TEST 宏 在app/meson.build文件中定义，通过全文搜索能找到，只在单元测试时才会定义此宏
#ifdef SC_TEST
bool
sc_parse_shortcut_mods(const char *s, uint8_t *shortcut_mods);

/*
 * 创建 getopt_long函数 需要的短选项的字符串，测试专用
 */
char *
adapter_create_optstring(void);
#endif

#endif
